//package cac.common;
//
//import java.io.Serializable;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import javax.faces.application.FacesMessage;
//import javax.faces.context.FacesContext;
//import javax.servlet.http.HttpServletRequest;
//
//
//import org.hibernate.Query;
//import org.hibernate.transform.Transformers;
//import org.jboss.seam.security.Identity;
//import org.jboss.seam.web.IdentityRequestWrapper;
//import org.osoa.sca.annotations.Reference;
//
//import com.sunsheen.jfids.system.base.composite.dao.IDao;
//import com.sunsheen.jfids.system.base.composite.data.query.QueryParameterImpl;
//import com.sunsheen.jfids.system.database.DBSession;
//import com.sunsheen.jfids.system.persistence.ISession;
//import com.sunsheen.jfids.system.security.login.ILogin;
//import com.sunsheen.jfids.system.sysman.ISysUser;
//import com.sunsheen.jfids.util.DataBaseUtil;
//
//
//public class LoginImpl implements ILogin {
//
//	IDao dao;
//
//	@Reference
//	public void setDao(IDao dao) {
//		this.dao = dao;
//	}
//
//	@Override
//	public ISysUser doLogin(Identity identity, Map data) {
//		String error = "登录失败";
//		SysUser currUser = new SysUser();
//		ISession session = dao.getSession();
//		try {
//			MD5 md5 = new MD5();
//			//用户
//			String account = identity.getCredentials().getUsername();
//			//密码---未加密
//			String password = identity.getCredentials().getPassword();
//			//密码加密
//			String pass_md5 = md5.getMD5ofStr(password);
//			System.out.println("doLogin----start");
//
//			/*if (FacesContext.getCurrentInstance() != null) {
//				currUser.getInfo().put(
//						"request",
//						(Serializable) ((IdentityRequestWrapper) FacesContext.getCurrentInstance()
//								.getExternalContext().getRequest()).getRequest());
//				currUser.getInfo().put(
//						"ip",
//						(getIP((HttpServletRequest) currUser.getInfo().get("request"))));
//			}*/
//			//获取当前用户判断当前用户是否被锁定,保证其在密码次数在3次以下，
//			Map<String, Object> userMap = getCurrUserAble(account, pass_md5,password, session);
//			System.out.println("User" + userMap);
//			if (userMap != null) {//用户存在
//				Map userData = userMap;
//				//将参数放到User中
//				currUser.setAccount((String) userData.get("ACCOUNT"));
//				currUser.setId((String) userData.get("ID"));
//				currUser.setMemo((String) userData.get("MEMO"));
//				currUser.setEmpid((String) userData.get("EMP_ID"));
//				currUser.setUsername((String) userData.get("USER_NAME"));
//				currUser.setPassword((String) userData.get("PASSWORD"));
//				//有效时间暂时 不做控制
//				//currUser.setValid_time((Date)userData.get("VALID_TIME"));
//				//currUser.setSecurity_level((String) userData.get("SECURITY_LEVEL"));
//				//用户角色列表
//				/*List<Map<String, Object>> roleList = getRoleList(currUser.getId(), session);
//				List<String> powerlist = new ArrayList();
//				powerlist =	getRoleUrl((String) userData.get("TS_USER_ID"));
//				if(powerlist.size()>0){
//					currUser.setUserpreview(powerlist);
//				}
//				if (roleList != null) {//用户有权限登录访问
//					for (int j = 0; j < roleList.size(); j++) {
//						String ts_role_id = roleList.get(j).get("TS_ROLE_ID").toString();
//						identity.addRole(ts_role_id);
//						currUser.getRole().add(new Role(ts_role_id));
//					}
//				} */
//				//重置密码
//				resetErrPass(currUser.getId(), session);
//				//System.out.println("获取登录IP地址" + currUser.getInfo().get("ip"));
//				//后台日志记录
//				//SysLog.saveLoginLog("后台登录", "3", "登录", currUser.getUsername()+"登录了系统", "ts_user", currUser.getId(), "成功", currUser.getId(), currUser.getUsername(),currUser.getInfo().get("ip").toString());
//
//				//调用连接将登录信息传递到其他业务系统
//				/*LoginOtherServer loginServer = new LoginOtherServer();
//				JSONObject param = new JSONObject();
//				param.accumulate("username", account);
//				param.accumulate("password", password);
//				loginServer.httpGet(param);*/
//
//
//				return currUser;
//			} else {//用户不符合登录条件
//				//获取用户名为account的信息
//				Map<String, Object> errMap = getErrUserInfo(account, session);
//				if (errMap == null) {
//					error = "用户不存在";
//				}else {//用户存在
//					Date date = new Date();
//					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//					Date valid_time = date;
//					if(errMap.get("VALID_TIME")==null||errMap.get("VALID_TIME").toString().equals("")){
//
//					}else{
//						valid_time = sdf.parse(errMap.get("VALID_TIME").toString());
//					}
//
//					if (!"1".equals(errMap.get("ENABLE").toString())) {//不可登陆
//						error = "用户账号被锁";
//					}else if (!pass_md5.equals(errMap.get("PASSWORD").toString())) {//密码错误
//						error = "密码错误";
//						//错误密码次数加一
//						addErrPassCount(account, session);
//						System.err.println("错误次数加一");
//						int pass_error_count = Integer.parseInt(errMap.get("PASS_ERROR_COUNT").toString());
//						if (pass_error_count >= 4) {//密码错误次数达到5次，系统自动将锁定改用户，禁止其登录。
//							//锁住用户，禁止登陆
//							unableUser(account, session);
//							System.err.println("用户被锁");
//							error = "账户已被锁定";
//						}
//					}else if (date.after(valid_time)) {//校验有效时间after相当于大于
//						error = "不在有效期内";
//					}
//				}
//				//返回null的时候User没有参数；返回User的时候可以直接访问
//				FacesContext.getCurrentInstance().addMessage(
//		                null,
//		                new FacesMessage(FacesMessage.SEVERITY_ERROR, error,
//		                        ""));
//				return null;
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//			//SysLog.saveLoginLog("后台登录", "3", "登录", identity.getCredentials().getUsername()+"登录了系统", "ts_user", "", "失败", "",data.get("account")+"",currUser.getInfo().get("ip").toString());
//			FacesContext.getCurrentInstance().addMessage(
//	                null,
//	                new FacesMessage(FacesMessage.SEVERITY_ERROR, "系统异常",
//	                        ""));
//			return null;
//		} finally {
//			//session.close();
//		}
//
//	}
//
//	/**
//	 * 设置用户不可登陆
//	 * @param account
//	 * @param session
//	 */
//	public void unableUser(String account, ISession session) {
//		Map<String, Object> parMap = new HashMap<>();
//		parMap.put("sqlString", "update TS_USER set enable = '0' where account =:account");
//		parMap.put("account", account);
//		execute(parMap, session);
//	}
//
//	/**
//	 * 增加错误密码次数
//	 * @param account
//	 * @param session
//	 */
//	public void addErrPassCount(String account, ISession session) {
//		Map<String, Object> parMap = new HashMap<>();
//		parMap.put("sqlString", "update TS_USER set pass_error_count = pass_error_count + 1 where account =:account");
//		parMap.put("account", account);
//		execute(parMap, session);
//	}
//
//	/**
//	 * 根据Account，获取用户信息
//	 * @param account
//	 * @param session
//	 * @return
//	 */
//	public Map<String, Object> getErrUserInfo(String account, ISession session) {
//		Map<String, Object> parMap = new HashMap<>();
//		parMap.put("sqlString", "SELECT ID,(select e.emp_name from ts_employee e where e.emp_id = account)as user_name, ACCOUNT, PASSWORD, ENABLE, "
//				+ "to_char(VALID_TIME,'YYYY-MM-DD hh24:mi:ss ') VALID_TIME,PASS_ERROR_COUNT "
//				+ "from TS_USER t where account =:account");
//		parMap.put("account", account);
//		List<Map<String, Object>> userList = getListUtil(parMap,session);
//		if (userList.size() > 0) {
//			return userList.get(0);
//		}
//		return null;
//	}
//
//	/**
//	 * 登陆成功后重置错误密码次数
//	 * @param ts_user_id
//	 * @param session
//	 */
//	public void resetErrPass(String ts_user_id, ISession session) {
//		Map<String, Object> parMap = new HashMap<>();
//		parMap.put("sqlString", "update TS_USER set pass_error_count = 0 where id =:ts_user_id");
//		parMap.put("ts_user_id", ts_user_id);
//		execute(parMap,session);
//	}
//
//	/**
//	 * 获取用户的角色权限
//	 * @param ts_user_id
//	 * @param session
//	 * @return
//	 */
//	public List<Map<String, Object>> getRoleList(String ts_user_id, ISession session) {
//		Map<String, Object> parMap = new HashMap<>();
//		parMap.put("ts_user_id", ts_user_id);
//		String sqlString = "SELECT id FROM TS_USERROLE WHERE id =:ts_user_id";
//		parMap.put("sqlString", sqlString);
//		List<Map<String, Object>> roleList = getListUtil(parMap,session);
//		return roleList;
//	}
//
//	/**
//	 * 校验用户信息，获取正确用户的信息
//	 * @param account
//	 * @param pass_md5
//	 * @param session
//	 * @return
//	 */
//	public Map<String, Object> getCurrUserAble(String account, String pass_md5, String password, ISession session) {
//		Map<String, Object> parMap = new HashMap<>();
//		//判断当前用户是否被锁定,保证其在密码次数在5次以下，
//		String sql11 = "select t.*,(select e.emp_name from ts_employee e where e.emp_id = t.account)as user_name  from TS_USER t where ENABLE = 1 and PASS_ERROR_COUNT < 5 "
//				+ " and (valid_time > sysdate or valid_time is null) "//验证有效时间
//				+ "and account=:account and (password=:md5_pass or password = :password)";
//		parMap.put("sqlString", sql11);
//		parMap.put("account", account);
//		//密码MD5加密
//		parMap.put("md5_pass", pass_md5);
//		parMap.put("password", password);
//		//查出用户
//		List<Map<String, Object>> userDataList = getListUtil(parMap,session);
//		if (userDataList.size() > 0) {
//			return userDataList.get(0);
//		}
//		return null;
//	}
//
//	public static List<Map<String, Object>> getListUtil(Map<String, Object> parMap,ISession session){
//		List<Map<String, Object>> list = null;
//		try {
//			Query query = session.createSQLQuery(parMap.get("sqlString").toString());
//			QueryParameterImpl qp = new QueryParameterImpl();
//			query = qp.initParameter(query, parMap);
//			query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
//			list = query.list();
//		} catch (Exception e) {
//			e.printStackTrace();
//			return list;
//			// TODO: handle exception
//		}
//		return list;
//	}
//
//	public static boolean execute(Map<String, Object> parMap,ISession session){
//		session.beginTransaction();
//		try {
//			Query query = session.createSQLQuery(parMap.get("sqlString").toString());
//			QueryParameterImpl qp = new QueryParameterImpl();
//			query = qp.initParameter(query, parMap);
//			query.executeUpdate();
//			session.commit();
//		} catch (Exception e) {
//			session.rollback();
//			System.err.println("执行异常");
//			return false;
//		}
//		return true;
//	}
//
//	public static String getIP(HttpServletRequest request) {
//        String ip = request.getHeader("x-forwarded-for");
//        if (!checkIP(ip)) {
//            ip = request.getHeader("Proxy-Client-IP");
//        }
//        if (!checkIP(ip)) {
//            ip = request.getHeader("WL-Proxy-Client-IP");
//        }
//        if (!checkIP(ip)) {
//            ip = request.getRemoteAddr();
//        }
//        if (ip.equals("0:0:0:0:0:0:0:1")) {
//            ip = "127.0.0.1";
//        }
//        return ip;
//    }
//    private static boolean checkIP(String ip) {
//        if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)
//                || ip.split(".").length != 4) {
//            return false;
//        }
//        return true;
//    }
//    /**
//	 * 获取当前用户的权限Url
//	 * @param userId
//	 * @return
//	 */
//	public static List<String> getRoleUrl(String userId) {
//		DBSession session = DataBaseUtil.getHibernateSession();
//		Map<String, Object> parMap = new HashMap<>();
//		List<Map<String, String>> urlList = null;
//		List<Map<String, String>> urlList_ = null;
//		List<Map<String, String>> urlList_1 = null;
//		List<Map<String, String>> urlList4 = null;
//		List<String> urlStringList = new ArrayList<String>();
//		try {
//			String sqlString = "SELECT URL FROM TS_MODEL "
//					+ "WHERE TS_MODEL_ID IN "
//					+ "(SELECT TS_MODEL_ID FROM TS_ROLE_PURVIEW "
//					+ "WHERE PURVIEW_TYPE = '10' AND TS_ROLE_ID IN(SELECT ts_role_id "
//					+ "FROM TS_USERROLE WHERE userid =:ts_user_id))";
//			parMap.put("ts_user_id", userId);
//			Query query = session.createSQLQuery(sqlString);
//			Query query2 = session.createDySQLQuery("RoleQuery.selectFormUrl");//当前权限下面的主数据url
//			Query query3 = session.createDySQLQuery("RoleQuery.selectWindowPage");//所有弹窗的URL
//			Query query4 = session.createDySQLQuery("RoleQuery.selectSupUrl");//所有的辅助表的url
//			QueryParameterImpl qp = new QueryParameterImpl();
//			query = qp.initParameter(query, parMap);
//			query2 = qp.initParameter(query2, parMap);
//			urlList =query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
//			urlList_ =query2.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
//			urlList_1 = query3.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
//			urlList4 = query4.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
//		} catch (Exception e) {
//			return urlStringList;
//		}
//
//		if (urlList != null && urlList.size()>0) {
//			for (int i = 0; i < urlList.size(); i++) {
//				urlStringList.add(urlList.get(i).get("URL"))  ;
//			}
//		}
//		if (urlList_ != null && urlList_.size()>0) {
//			for (int i = 0; i < urlList_.size(); i++) {
//				urlStringList.add(urlList_.get(i).get("url"))  ;
//			}
//		}
//		if (urlList_1 != null && urlList_1.size()>0) {
//			for (int i = 0; i < urlList_1.size(); i++) {
//				urlStringList.add(urlList_1.get(i).get("url"))  ;
//			}
//		}
//		if (urlList4 != null && urlList4.size()>0) {
//			for (int i = 0; i < urlList4.size(); i++) {
//				urlStringList.add(urlList4.get(i).get("url"))  ;
//			}
//		}
//		return urlStringList;
//	}
//}
